package cn.zqy.demo2.day10.CopyFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
    文件复制练习:一读一写

    明确:
        数据源: d:\\PDF_411995698.pdf
        数据的目的地: e:\\PDF_411995698.pdf

    文件复制的步骤:
        1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
        2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
        3.使用字节输入流对象中的方法read读取文件
        4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
        5.释放资源
    文件的大小:189 Kb
    一次读写一个字节:2996毫秒
    使用数组缓冲读取多个字节,写入多个字节:101毫秒
 */

public class Demo01CopyFile {
    public static void main(String[] args) throws IOException {
        long start = System.currentTimeMillis();
        //1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
        FileInputStream fis = new FileInputStream("d:"+ File.separator + "PDF_411995698.pdf");
        //2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
        FileOutputStream fos = new FileOutputStream("e:\\PDF_411995698.pdf");

        //3.使用字节输入流对象中的方法read读取文件【一次读取一字节写一字节】
        int len = 0;
        while ((len = fis.read()) != -1) {
            //4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
            fos.write(len);
        }

        byte[] bytes = new byte[1024];
        /*while ((len = fis.read(bytes)) != -1) {
            fos.write(bytes, 0, len);
        }*/

        //5.释放资源(先关写的,后关闭读的;如果写完了,肯定读取完毕了)
        fos.close();
        fis.close();

        long end = System.currentTimeMillis();
        System.out.println("复制文件总耗时：" + (end - start) + "毫秒");
    }
}
